import request from '@/utils/request'

// OJ在线练习相关接口

/**
 * 获取题目列表
 * @param {Object} query - 查询参数
 * @param {string} query.keyword - 搜索关键词
 * @param {string} query.difficulty - 难度等级
 * @param {string} query.category - 题目类别
 * @param {string} query.status - 完成状态
 * @param {number} query.pageNum - 页码
 * @param {number} query.pageSize - 每页大小
 */
export function getProblemList(query) {
  return request({
    url: '/system/oj/problems',
    method: 'get',
    params: query
  })
}

/**
 * 获取题目详情
 * @param {string} problemId - 题目ID
 */
export function getProblemDetail(problemId) {
  return request({
    url: `/system/oj/problems/${problemId}`,
    method: 'get'
  })
}

/**
 * 获取题目测试用例
 * @param {string} problemId - 题目ID
 */
export function getProblemTestCases(problemId) {
  return request({
    url: `/system/oj/problems/${problemId}/testcases`,
    method: 'get'
  })
}

/**
 * 运行代码（本地测试）
 * @param {Object} data - 请求参数
 * @param {string} data.problemId - 题目ID
 * @param {string} data.code - 代码内容
 * @param {string} data.language - 编程语言
 * @param {string} data.input - 输入数据
 * @param {boolean} data.enableO2 - 是否开启O2优化
 */
export function runCode(data) {
  return request({
    url: '/system/oj/run',
    method: 'post',
    data: data
  })
}

/**
 * 提交代码
 * @param {Object} data - 请求参数
 * @param {string} data.problemId - 题目ID
 * @param {string} data.code - 代码内容
 * @param {string} data.language - 编程语言
 * @param {boolean} data.enableO2 - 是否开启O2优化
 * @param {string} data.submissionType - 提交类型 (practice, contest, homework)
 */
export function submitCode(data) {
  return request({
    url: '/system/oj/submit',
    method: 'post',
    data: data
  })
}

/**
 * 获取提交结果
 * @param {string} submissionId - 提交ID
 */
export function getSubmissionResult(submissionId) {
  return request({
    url: `/system/oj/submissions/${submissionId}/result`,
    method: 'get'
  })
}

/**
 * 获取提交历史
 * @param {Object} query - 查询参数
 * @param {string} query.userId - 用户ID
 * @param {string} query.problemId - 题目ID
 * @param {string} query.status - 提交状态
 * @param {string} query.language - 编程语言
 * @param {string} query.startTime - 开始时间
 * @param {string} query.endTime - 结束时间
 * @param {number} query.pageNum - 页码
 * @param {number} query.pageSize - 每页大小
 */
export function getSubmissionHistory(query) {
  return request({
    url: '/system/oj/submissions',
    method: 'get',
    params: query
  })
}

/**
 * 获取提交统计
 * @param {Object} query - 查询参数
 * @param {string} query.userId - 用户ID
 * @param {string} query.timeRange - 时间范围
 */
export function getSubmissionStats(query) {
  return request({
    url: '/system/oj/submissions/stats',
    method: 'get',
    params: query
  })
}

/**
 * 获取编程语言支持列表
 */
export function getSupportedLanguages() {
  return request({
    url: '/system/oj/languages',
    method: 'get'
  })
}

/**
 * 获取语言配置信息
 * @param {string} language - 编程语言
 */
export function getLanguageConfig(language) {
  return request({
    url: `/system/oj/languages/${language}/config`,
    method: 'get'
  })
}

/**
 * 获取题目排行榜
 * @param {Object} query - 查询参数
 * @param {string} query.problemId - 题目ID
 * @param {string} query.rankingType - 排行类型 (time, memory, codeLength)
 * @param {number} query.limit - 限制数量
 */
export function getProblemRanking(query) {
  return request({
    url: '/system/oj/problems/ranking',
    method: 'get',
    params: query
  })
}

/**
 * 获取用户解题进度
 * @param {string} userId - 用户ID
 */
export function getUserProgress(userId) {
  return request({
    url: `/system/oj/users/${userId}/progress`,
    method: 'get'
  })
}

/**
 * 获取题目分类
 */
export function getProblemCategories() {
  return request({
    url: '/system/oj/categories',
    method: 'get'
  })
}

/**
 * 获取题目标签
 */
export function getProblemTags() {
  return request({
    url: '/system/oj/tags',
    method: 'get'
  })
}

/**
 * 获取相关题目推荐
 * @param {Object} query - 查询参数
 * @param {string} query.problemId - 题目ID
 * @param {string} query.userId - 用户ID
 * @param {number} query.limit - 推荐数量
 */
export function getRelatedProblems(query) {
  return request({
    url: '/system/oj/problems/related',
    method: 'get',
    params: query
  })
}

/**
 * 获取题目讨论
 * @param {Object} query - 查询参数
 * @param {string} query.problemId - 题目ID
 * @param {number} query.pageNum - 页码
 * @param {number} query.pageSize - 每页大小
 */
export function getProblemDiscussions(query) {
  return request({
    url: '/system/oj/problems/discussions',
    method: 'get',
    params: query
  })
}

/**
 * 添加题目讨论
 * @param {Object} data - 请求参数
 * @param {string} data.problemId - 题目ID
 * @param {string} data.title - 讨论标题
 * @param {string} data.content - 讨论内容
 * @param {string} data.type - 讨论类型 (question, solution, discussion)
 */
export function addProblemDiscussion(data) {
  return request({
    url: '/system/oj/discussions',
    method: 'post',
    data: data
  })
}

/**
 * 获取题目解决方案
 * @param {Object} query - 查询参数
 * @param {string} query.problemId - 题目ID
 * @param {string} query.language - 编程语言
 * @param {number} query.pageNum - 页码
 * @param {number} query.pageSize - 每页大小
 */
export function getProblemSolutions(query) {
  return request({
    url: '/system/oj/problems/solutions',
    method: 'get',
    params: query
  })
}

/**
 * 获取代码模板
 * @param {Object} query - 查询参数
 * @param {string} query.language - 编程语言
 * @param {string} query.problemType - 题目类型
 */
export function getCodeTemplate(query) {
  return request({
    url: '/system/oj/code-templates',
    method: 'get',
    params: query
  })
}

/**
 * 保存用户代码草稿
 * @param {Object} data - 请求参数
 * @param {string} data.problemId - 题目ID
 * @param {string} data.code - 代码内容
 * @param {string} data.language - 编程语言
 * @param {string} data.userId - 用户ID
 */
export function saveCodeDraft(data) {
  return request({
    url: '/system/oj/code-drafts',
    method: 'post',
    data: data
  })
}

/**
 * 获取用户代码草稿
 * @param {string} problemId - 题目ID
 * @param {string} userId - 用户ID
 */
export function getCodeDraft(problemId, userId) {
  return request({
    url: `/system/oj/code-drafts/${problemId}/${userId}`,
    method: 'get'
  })
}

/**
 * 获取用户代码草稿列表
 * @param {Object} query - 查询参数
 * @param {string} query.userId - 用户ID
 * @param {number} query.pageNum - 页码
 * @param {number} query.pageSize - 每页大小
 */
export function getCodeDraftList(query) {
  return request({
    url: '/system/oj/code-drafts',
    method: 'get',
    params: query
  })
}

/**
 * 删除代码草稿
 * @param {string} draftId - 草稿ID
 */
export function deleteCodeDraft(draftId) {
  return request({
    url: `/system/oj/code-drafts/${draftId}`,
    method: 'delete'
  })
}

/**
 * 获取OJ系统状态
 */
export function getOjSystemStatus() {
  return request({
    url: '/system/oj/status',
    method: 'get'
  })
}

/**
 * 获取OJ系统配置
 */
export function getOjSystemConfig() {
  return request({
    url: '/system/oj/config',
    method: 'get'
  })
}

/**
 * 获取用户OJ统计信息
 * @param {string} userId - 用户ID
 */
export function getUserOjStats(userId) {
  return request({
    url: `/system/oj/users/${userId}/stats`,
    method: 'get'
  })
}

/**
 * 获取OJ排行榜
 * @param {Object} query - 查询参数
 * @param {string} query.rankingType - 排行类型 (submission, accepted, rating)
 * @param {string} query.timeRange - 时间范围
 * @param {number} query.limit - 限制数量
 */
export function getOjRanking(query) {
  return request({
    url: '/system/oj/ranking',
    method: 'get',
    params: query
  })
}

// OJ题目管理
export function listProblem(query) {
  return request({
    url: '/system/oj/problems',
    method: 'get',
    params: query
  })
}

export function getProblem(problemId) {
  return request({
    url: '/system/oj/problems/' + problemId,
    method: 'get'
  })
}

export function addProblem(data) {
  return request({
    url: '/system/oj/problems',
    method: 'post',
    data: data
  })
}

export function updateProblem(data) {
  return request({
    url: '/system/oj/problems',
    method: 'put',
    data: data
  })
}

export function delProblem(problemIds) {
  return request({
    url: '/system/oj/problems/' + problemIds,
    method: 'delete'
  })
}

// OJ代码提交管理
export function listSubmission(query) {
  return request({
    url: '/system/oj/submissions',
    method: 'get',
    params: query
  })
}

export function getSubmission(submissionId) {
  return request({
    url: '/system/oj/submissions/' + submissionId,
    method: 'get'
  })
}

export function addSubmission(data) {
  return request({
    url: '/system/oj/submissions',
    method: 'post',
    data: data
  })
}

export function updateSubmission(data) {
  return request({
    url: '/system/oj/submissions',
    method: 'put',
    data: data
  })
}

export function delSubmission(submissionIds) {
  return request({
    url: '/system/oj/submissions/' + submissionIds,
    method: 'delete'
  })
}

export function rejudgeSubmission(submissionId) {
  return request({
    url: '/system/oj/submissions/' + submissionId + '/rejudge',
    method: 'post'
  })
} 